/*
1:下载axios
2:导入axios
3:配制基地址之类
4：加入请求拦截与响应拦截
5：暴露出去
6：src/api/模块.js再导入使用
*/
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router' // this.$router===router
// import i18n from '@/lang'
const request = axios.create({
  // baseURL: 'http://119.91.150.211:3000/api'  // 推荐没有本地接口同学使用
  baseURL: process.env.VUE_APP_URL, // 有本地接口同学使用
  withCredentials: true
})

request.interceptors.request.use(
  (config) => {
    /*
    统一请求头：
    1：接口不管是否需要token加了不会报错，直接添加就可以了
    config.headers.Authorization = `Bearer ${store.state.user.token}`
    2：接口不需要token，加了会直接报错
      在请求配制不需要token的接口加入noToken:true
      请求拦截做一个判断处理
        if(!config.noToken){
          config.headers.Authorization = `Bearer ${store.state.user.token}`
        }
    */
    // if (store.state.user.token && !config.noToken) {
    //   config.headers.Authorization = `Bearer ${store.state.user.token}`
    // }
    // config.url = config.url + '?lang=' + i18n.locale
    if (store.state.user.token) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }
    // console.log('config', config)
    return config
  },
  (err) => {
    return Promise.reject(err)
  }
)
request.interceptors.response.use(
  (res) => {
    // 状态码200-300间，不包含300  if(status>=200  && status<300)
    if (res.data.success) {
      return res.data
    } else {
      // 提示错误
      Message.error(res.data.message)
      // 抛出一个错误
      // console.log(a.b)
      // return undefined
      // 作用：中止后面代码.then的执行，执行.catch
      return Promise.reject(new Error(res.data.message))
    }
  },
  (err) => {
    // const t= new Promise((resolve,reject)=>{
    //   reject(err)
    // })
    // t.catch(err=>{

    // })
    /*
    token失效
     1：拦截出来
     2：删除token
     3: 删除用户信息
     4：提示用户
     5：打回登录页
*/
    // console.log('err', [err])
    if (err.response && err.response.status === 401) {
      store.commit('user/LOGOUT')
      Message.error(err.response.data.message)
      router.push('/login')
    }

    return Promise.reject(err)
  }
)
export default request
